package com.qww;

import static net.mindview.util.Print.*;

public class Test08 {

    public static void main(String[] args) {
        int x = -1;
        // 负数使用的是补码
        // -1的原码是10000000 00000000 00000000 00000001
        // -1的反码是11111111 11111111 11111111 11111110
        // -1的补码是11111111 11111111 11111111 11111111
        print(Integer.toBinaryString(x));  // 11111111 11111111 11111111 11111111
        // x无符号右移10位，位
        x >>>= 10;
        // 将x的补码无符号右移10位的00000000 11111111 11111111 11111111
        print(Integer.toBinaryString(x)); // 11111111 11111111 11111111

        long y = -1;
        // -1 的原码是 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001
        // -1 的反码是 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110
        // -1 的补码是 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
        print(Long.toBinaryString(y));  // 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
        y >>>= 10;
        print(Long.toBinaryString(y));  // 00000000 00111111 11111111 11111111 11111111 11111111 11111111 11111111

        short s = -1;
        // -1 的原码是 10000000 00000001
        // 先将short类型，转换为int类型 10000000 00000000 00000000 00000001
        // 然后后面的计算和int一样了
        print(Integer.toBinaryString(s));
        s >>>= 10;
        // 11111111 11111111 11111111 11111111
        // 右移10位是  00111111 11111111 11111111
        // 然后截取 11111111 11111111
        print(Integer.toBinaryString(s));

        byte b = -1;
        print(Integer.toBinaryString(b));
        // 这个移位运算的结果，没有赋值给b，而是直接打印出来的int类型，没有截断，所以结果数正确的。
        print(Integer.toBinaryString(b>>>10));
    }
}
